#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <sys/timeb.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h> // file option
#include <dirent.h>
// #include <iostream>
// #include <sstream>
// #include <vector>
// #include <list>
// #include <map>
// #include <thread>
// #include <string>
// #include <iomanip>
// #include <fstream>
// #include <vector>
// #include <set>
// #include <algorithm>
// #include <unordered_map>
// #include <mutex>
// #include <atomic>
// #include <bits/wordsize.h>
// #include <bits/timesize.h>
using namespace std;
#include <stdarg.h>
//模拟一个snprintf函数，来讲解va_list
//va_list用来获取函数...多重参数的。
static int printStr(char *outstr, int outlen, const char *format, ...)
{
    va_list args;
    memset(outstr, 0, outlen);
    va_start(args, format);
    int tmplen = vsnprintf(outstr, outlen, format, args);
    va_end(args);
    return tmplen;
}

int main()
{
    char tmpbuf[1024];
    int tmplen = printStr(tmpbuf, sizeof(tmpbuf), "12345:%p:%s", tmpbuf, "abcd");
    printf("tmplen=%d\n", tmplen);
    printf("tmpbuf=%s\n", tmpbuf);
}